package teemo

import (
	"time"

	"github.com/go-resty/resty/v2"
)

// Client 封装了底层 resty.Client、日志和调试配置，是 HTTP 请求的核心客户端。
type Client struct {
	resty  *resty.Client
	logger Logger
	debug  bool
}

// ClientOption 定义客户端配置函数类型，用于自定义 Client 行为。
type ClientOption func(*Client)

// WithDebug 启用调试模式，日志级别自动提升为 Debug。
// 返回值: ClientOption，可用于 New 创建客户端时传入。
func WithDebug() ClientOption {
	return func(c *Client) {
		c.logger = c.logger.LogMode(Debug)
		c.debug = true
	}
}

// WithLogger 设置自定义日志记录器。
// logger: 实现 Logger 接口的日志对象。
// 返回值: ClientOption，可用于 New 创建客户端时传入。
func WithLogger(logger Logger) ClientOption {
	return func(c *Client) {
		if logger != nil {
			c.logger = logger
		}
	}
}

// WithTimeout 设置 HTTP 客户端超时时间。
// timeout: 超时时长。
// 返回值: ClientOption，可用于 New 创建客户端时传入。
func WithTimeout(timeout time.Duration) ClientOption {
	return func(c *Client) {
		c.resty.SetTimeout(timeout)
	}
}

// WithRetryCount 设置请求重试次数。
// count: 重试次数。
// 返回值: ClientOption，可用于 New 创建客户端时传入。
func WithRetryCount(count int) ClientOption {
	return func(c *Client) {
		c.resty.SetRetryCount(count)
	}
}

// WithBaseURL 设置基础请求地址，后续请求将自动拼接。
// url: 基础 URL。
// 返回值: ClientOption，可用于 New 创建客户端时传入。
func WithBaseURL(url string) ClientOption {
	return func(c *Client) {
		c.resty.SetBaseURL(url)
	}
}
